﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DXL_Library
{
    public enum TIPO_DATO
    {
        VACIO = (int)0,
        TEXTO,
        FECHA,
        DECIMAL,
    }

    public class PosibleValues
    {


        private string[] textosTIPOS =
        {
                "VACIO",
                "TEXTO",
                "FECHA",
                "DECIMAL",
        }
        ;
        private object _obj;

        public TIPO_DATO tipoDato;

        private string valTexto;
        private DateTime valFecha;
        private decimal valDecimal;



        public PosibleValues(object obj)
        {
            string msg;

            _obj = obj;
            tipoDato = TIPO_DATO.VACIO;

            if (_obj != null)
            {
                Type t;

                t = _obj.GetType();
                valTexto = _obj.ToString();

                if ((valTexto != null) && (valTexto != string.Empty))
                {

                    if (Decimal.TryParse(valTexto, out valDecimal))
                    {
                        tipoDato = TIPO_DATO.DECIMAL;
                    }
                    else
                    {
                        if (Util.Obtenerfecha(valTexto, out valFecha, out msg))
                        {
                            tipoDato = TIPO_DATO.FECHA;
                        }
                        else
                        {
                            Double aux;

                            if (Util.NotacionCientifica(valTexto, out aux))
                            {
                                tipoDato = TIPO_DATO.DECIMAL;
                                //TODO ojo posible perdida de precision...
                                valDecimal = (Decimal)aux;
                            }
                            else
                            {
                                tipoDato = TIPO_DATO.TEXTO;
                            }

                        }
                    }



                }


            }
            if ((tipoDato == TIPO_DATO.VACIO) && (Util.INTERPRETAR_VACIO_COMO_CERO))
            {
                tipoDato = TIPO_DATO.DECIMAL;
                valDecimal = new Decimal(0.0);
            }

        }

        public string ObtenerTextoTipo()
        {
            return textosTIPOS[(int)this.tipoDato];
        }

        public object ObtenerValor()
        {
            object resp;

            resp = default(object);
            switch (this.tipoDato)
            {

                case TIPO_DATO.DECIMAL:
                    resp = this.valDecimal;
                    break;

                case TIPO_DATO.FECHA:
                    resp = this.valFecha;
                    break;
                case TIPO_DATO.TEXTO:
                    resp = this.valTexto;
                    break;
                case TIPO_DATO.VACIO:
                    if (Util.INTERPRETAR_VACIO_COMO_CERO)
                    {
                        resp = new Decimal(0);
                    }
                    else
                    {
                        resp = null;
                    }
                    break;
            }
            return resp;
        }



    }

    
}
